// 导入electron
const electron = require('electron');
const path = require('path');
const notifier = require('node-notifier');
// 导入控制生命周期的模块、创建原生浏览器窗口的模块
const {app , BrowserWindow, Menu, Tray,shell,ipcMain} = electron;


// 导入命令行模块
const exec = require('child_process').exec;


// 导入browserWindow新窗口生成
const MainWindow = require('./app/js/browserWindow');
const IpcMain = require('./app/js/ipcMain');

const WindowsBalloon = require('node-notifier').WindowsBalloon;

class App {
    constructor(){
 		// 保持一个对于 window 对象的全局引用，如果你不这样做，
		// 当 JavaScript 对象被垃圾回收， window 会被自动地关闭
    	this.mainWindow = null;
		this.appIcon = null;
    }
    init(){
    	this.readyApp();
    }
    readyApp(){
		// Electron 会在初始化后并准备
		// 创建浏览器窗口时，调用这个函数。
		// 部分 API 在 ready 事件触发后才能使用。
		app.on('ready', () => {
	    	this.createWindow();
		});

		var notifier = new WindowsBalloon({
		  withFallback: false, // Try Windows Toast and Growl first?
		  customPath: '' // 	
		});

		notifier.notify({
		  title: '标题',
		  message: '这是内容',
		  sound: false, // true | false.
		  time: 5000, // How long to show balloon in ms
		  wait: false, // Wait for User Action against Notification
		  type: 'info' // The notification type : info | warn | error
		}, function(error, response) {
		  console.log(response);
		});

		// 当全部窗口关闭时退出
		app.on('window-all-closed', () => {
			// 在macOS上，除非用户用Cmd + Q 确定的退出
			// 否则绝大部分应用及其菜单栏会保持激活
			if (process.platform !== 'darwin') app.quit();
		});

		// 当应用被激活时触发，常用于点击应用的 dock 图标的时候。
		app.on('activate', () => {
			// 在 macOS 上，当点击 dock 图标并且该应用没有打开的窗口时，
			// 绝大部分应用会重新创建一个窗口。
			if (this.mainWindow === null) this.createWindow(); 
		});  
		
    	// 导入ipc通信模块
		new IpcMain(this.mainWindow);

    }
    createWindow() {
    	this.mainWindow = new MainWindow();
    }
}

new App().init();


// 创建一个新的浏览器窗口
// function createWindow() {

// 	// shell.showItemInFolder('/Users/6ceng/mps-app');

// 	// exec('cd /Users/6ceng/mps-app', {'cwd': 'projectPath'});
// 	// // exec('cd /Users/6ceng/mps-app', (error, stdout, cwd) => {
// 	// //   if (error) {
// 	// //     console.error(error);
// 	// //     return;
// 	// //   }
// 	// //   console.log(stdout);
// 	// //   console.log(cwd);

// 	// // });

// 	exec('ls /Users/6ceng', (err, stdout, stderr) => {
// 	  if (err) {
// 	    console.error(err);
// 	    return;
// 	  }
// 	  console.log(stdout);
// 	});


// 	// Tray
// 	if (!appIcon) {
// 		appIcon = new Tray('/Users/6ceng/mode/assets/img/WeFlow.png');
// 		var contextMenu = Menu.buildFromTemplate([
// 			{ label: 'Item1', type: 'radio' },
// 			{ label: 'Item2', type: 'radio' },
// 			{ label: 'Item3', type: 'radio', click: function() {app.quit();} },
// 			{ label: 'Item4', type: 'radio' }
// 		]);

// 		appIcon.setToolTip('This is my application.');
// 		appIcon.setContextMenu(contextMenu);		
// 	}

// 	// 创建浏览器窗口
// 	mainWindow = new BrowserWindow({
// 		width: 300,
// 		height: 500,
// 		icon: path.join(__dirname, './assets/img/weFlow.png'), //窗口图标, 如果不设置，窗口将使用可用的默认图标.
// 	});

// 	// 加载应用的 index.html
// 	mainWindow.loadURL('file://' + __dirname + '/app/index.html');

// 	// 启用开发者工具
// 	// mainWindow.webContents.openDevTools();

// 	// 当window 被关闭，这个方法会触发
// 	mainWindow.on('closed', () => {
// 	    // 取消引用 window 对象，如果你的应用支持多窗口的话，
// 	    // 通常会把多个 window 对象存放在一个数组里面，
// 	    // 与此同时，你应该删除相应的元素。
// 	    mainWindow = null;
// 	});

// 	// notifier 提醒
// 	notifier.notify({
// 		'title': '提醒咯 ～',
// 		'message': '窗口加载完毕～ ',
// 		sound: true, // Only Notification Center or Windows Toasters
//   		wait: true
// 	},function(){
// 	});

// 	notifier.on('click', function () {
// 		app.quit();
// 	});	




// }

// 在这文件，你可以续写应用剩下主进程代码。
// 也可以拆分成几个文件，然后用 require 导入。